package br.com.puertorico.model.querybuilder.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Defines the specific rules for a given argument.
 *
 * @author daniel.camargo
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface Argument {

	/**
	 * @return Identificador do argumento
	 */
	String id();

	/**
	 * @return A forma como o argumento precisa ser formatado
	 */
	Formatter formatter() default Formatter.NONE;

	/**
	 * @return The column name. Eg: obj.id
	 */
	String name();

	/**
	 * @return The operand
	 */
	Operand operand() default Operand.EQUAL;

	/**
	 * @return Os ids das clausulas where de quem este argumento depende.
	 */
	String[] requiredWhereClauses() default "";

	/**
	 * @return Os ids das clausulas join de quem este argumento depende.
	 */
	String[] requiredJoinClauses() default "";

	/**
	 * @return os ids dos argumentos de quem este argumento depende.
	 */
	String[] dependsOn() default "";

}
